/**
 * 
 */
package ec.edu.uce.tour.web.catalogos.controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.SelectItem;

import ec.edu.uce.tour.dao.util.ParametroSentencia;
import ec.edu.uce.tour.dto.ProvinciasDTO;
import ec.edu.uce.tour.dto.SelectOneListDTO;
import ec.edu.uce.tour.excepcion.UceTourException;
import ec.edu.uce.tour.facade.UceTourGeneralServicio;
import ec.edu.uce.tour.modelo.PaisTbl;
import ec.edu.uce.tour.modelo.ProvinciaTbl;
import ec.edu.uce.tour.web.utilitarios.Utilitario;

/**
 * @author XPS15Z
 * 
 */
@ManagedBean(name = "provinciaController")
@ViewScoped
public class ProvinciaController implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 8935950508375876287L;
	private String codigoProvincia;
	private String nombreProvincia;

	private Integer idEstadoProvincia;
	private List<SelectItem> listaEstado = new ArrayList<SelectItem>() {

		private static final long serialVersionUID = 1L;
		{
			add(new SelectItem(1, "Activo"));
			add(new SelectItem(2, "Inactivo"));
		}

	};

	private Integer idProvincias;
	private List<ProvinciasDTO> listaProvincias = new ArrayList<ProvinciasDTO>();
	private Integer idPais;
	private List<SelectItem> listaPaises = new ArrayList<SelectItem>();

	@EJB
	private UceTourGeneralServicio uceTourGeneralServicio;

	@PostConstruct
	public void init() {

		listaPaises.clear();
		idPais = 0;
		try {
			List<SelectOneListDTO> listaAuxiliar = uceTourGeneralServicio
					.obtenerDatosSelectList(PaisTbl.class, "paiIdPk",
							"paiNombre", "paiEstado", new ParametroSentencia(
									"estado", "A"));
			if (!listaAuxiliar.isEmpty()) {
				for (SelectOneListDTO selectOneListDTO : listaAuxiliar) {
					if (idPais == 0) {
						idPais = selectOneListDTO.getId();
					}
					listaPaises.add(new SelectItem(selectOneListDTO.getId(),
							selectOneListDTO.getValue().toString()));
				}

			}
			obtenerTablaProvincia();

		} catch (UceTourException e) {
			// TODO Auto-generated catch block
			Utilitario.mensajeError("No se han podido cargar los paises", e);
		}

	}

	public void guardarProvincia() {
		try {
			if (!nombreProvincia.trim().equals("")
					&& !codigoProvincia.trim().equals("")) {
				ProvinciaTbl provincia = new ProvinciaTbl();
				PaisTbl paisAux = new PaisTbl();
				paisAux.setPaiIdPk(idPais);
				provincia.setPaisTbl(paisAux);
				// ProvinciaTbl provincia = new ProvinciaTbl();
				provincia.setProvCodigo(codigoProvincia);
				provincia.setProvNombre(nombreProvincia);
				provincia.setProvEstado(idEstadoProvincia == 1 ? "A" : "I");
				String mensaje = "";
				if (idProvincias != 0) {
					provincia.setProvIdPk(idProvincias);
					mensaje = "Se ha actualizado correctamente la provincia.";
					try {
						uceTourGeneralServicio.modificarCatalogo(provincia);
						idProvincias = null;
						obtenerTablaProvincia();
					} catch (UceTourException e) {
						// TODO Auto-generated catch block
						Utilitario.mensajeError(e.getLocalizedMessage(), e);
					} catch (Throwable e) {
						// TODO Auto-generated catch block
						Utilitario.mensajeError(e.getLocalizedMessage(), e);
					}
				} else {
					try {
						uceTourGeneralServicio.guardarCatalogo(provincia);
						mensaje = "Se ha guardado correctamente.";
						obtenerTablaProvincia();
					} catch (UceTourException e) {
						// TODO Auto-generated catch block
						Utilitario.mensajeError(e.getLocalizedMessage(), e);
					} catch (Throwable e) {
						// TODO Auto-generated catch block
						Utilitario.mensajeError(e.getLocalizedMessage(), e);
					}
				}
				Utilitario.mensajeInformativo(mensaje);
			} else {
				Utilitario.mensajeError("Por favor ingrese valores validos",
						null);
			}
		} catch (Throwable e) {
			Utilitario.mensajeError(e.getLocalizedMessage(), e);
		}

	}

	public void obtenerTablaProvincia() {
		// TODO Auto-generated method stub
		try {
			listaProvincias = uceTourGeneralServicio.cargarProvinciasPorPais(idPais);
		} catch (UceTourException e) {
			// TODO Auto-generated catch block
			Utilitario.mensajeError(e.getLocalizedMessage(), e);
		} catch (Throwable e) {
			// TODO Auto-generated catch block
			Utilitario.mensajeError(e.getLocalizedMessage(), e);
		}
	}

	public void editarProvincia(Integer idProvincia) {
		this.idProvincias = idProvincia;
		try {
			ProvinciaTbl provinciaActual = (ProvinciaTbl) uceTourGeneralServicio
					.cargarCatalogoPorId(ProvinciaTbl.class, idProvincia);
			idPais = provinciaActual.getPaisTbl().getPaiIdPk();
			nombreProvincia = provinciaActual.getProvNombre();
			idEstadoProvincia = provinciaActual.getProvEstado().equals("A") ? 1
					: 0;
			codigoProvincia = provinciaActual.getProvCodigo();

		} catch (UceTourException e) {
			// TODO Auto-generated catch block
			Utilitario.mensajeError(e.getLocalizedMessage(), e);
		} catch (Throwable e) {
			// TODO Auto-generated catch block
			Utilitario.mensajeError(e.getLocalizedMessage(), e);
		}
	}
	
	public void cancelarProvincia(){
		init();
		idProvincias=null;
		codigoProvincia="";
		nombreProvincia="";
		
	}

	/**
	 * @return the listaPaises
	 */
	public List<SelectItem> getListaPaises() {
		return listaPaises;
	}

	/**
	 * @param listaPaises
	 *            the listaPaises to set
	 */
	public void setListaPaises(List<SelectItem> listaPaises) {
		this.listaPaises = listaPaises;
	}

	/**
	 * @return the idPais
	 */
	public Integer getIdPais() {
		return idPais;
	}

	/**
	 * @param idPais
	 *            the idPais to set
	 */
	public void setIdPais(Integer idPais) {
		this.idPais = idPais;
	}

	/**
	 * @return the codigoProvincia
	 */
	public String getCodigoProvincia() {
		return codigoProvincia;
	}

	/**
	 * @param codigoProvincia
	 *            the codigoProvincia to set
	 */
	public void setCodigoProvincia(String codigoProvincia) {
		this.codigoProvincia = codigoProvincia;
	}

	/**
	 * @return the nombreProvincia
	 */
	public String getNombreProvincia() {
		return nombreProvincia;
	}

	/**
	 * @param nombreProvincia
	 *            the nombreProvincia to set
	 */
	public void setNombreProvincia(String nombreProvincia) {
		this.nombreProvincia = nombreProvincia;
	}

	/**
	 * @return the idEstadoProvincia
	 */
	public Integer getIdEstadoProvincia() {
		return idEstadoProvincia;
	}

	/**
	 * @param idEstadoProvincia
	 *            the idEstadoProvincia to set
	 */
	public void setIdEstadoProvincia(Integer idEstadoProvincia) {
		this.idEstadoProvincia = idEstadoProvincia;
	}

	/**
	 * @return the listaEstado
	 */
	public List<SelectItem> getListaEstado() {
		return listaEstado;
	}

	/**
	 * @param listaEstado
	 *            the listaEstado to set
	 */
	public void setListaEstado(List<SelectItem> listaEstado) {
		this.listaEstado = listaEstado;
	}

	/**
	 * @return the idProvincias
	 */
	public Integer getIdProvincias() {
		return idProvincias;
	}

	/**
	 * @param idProvincias
	 *            the idProvincias to set
	 */
	public void setIdProvincias(Integer idProvincias) {
		this.idProvincias = idProvincias;
	}

	/**
	 * @return the listaProvincias
	 */
	public List<ProvinciasDTO> getListaProvincias() {
		return listaProvincias;
	}

	/**
	 * @param listaProvincias
	 *            the listaProvincias to set
	 */
	public void setListaProvincias(List<ProvinciasDTO> listaProvincias) {
		this.listaProvincias = listaProvincias;
	}

}
